package com.uade.servlets;

import java.io.IOException;
import java.util.List;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import com.uade.business.BusinessDelegate;
import com.uade.business.BusinessDelegateImpl;
import com.uade.model.Articulo;
import com.uade.model.Compra;
import com.uade.model.Configuracion;
import com.uade.model.Evento;
import com.uade.model.ItemCompra;
import com.uade.model.exceptions.BusinessException;
import com.uade.model.exceptions.LogisticaMonitoreoException;
import com.uade.model.exceptions.NotFoundException;
import com.uade.webservices.logisticaMonitoreo.LogCreator;

/**
 * Servlet implementation class BajaItemCarritoSrv
 */
public class BajaItemCarritoSrv extends HttpServlet {
	private static final long serialVersionUID = 1L;
     private static Logger log = Logger.getLogger(BajaItemCarritoSrv.class);
    /**
     * @see HttpServlet#HttpServlet()
     */
    public BajaItemCarritoSrv() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		try
		{
		int articuloId = Integer.valueOf(request.getParameter("articuloId"));		
		
		BusinessDelegate busDel = BusinessDelegateImpl.getInstance();			
		Articulo articulo = busDel.busqueda(articuloId);		
		Compra compra = (Compra)request.getSession().getAttribute("compra");			
		List<ItemCompra> itemsCompra = compra.getItems();				
			
		int posicionEliminar = -1;
		for (int i=0; i<itemsCompra.size(); i++) {
			if(itemsCompra.get(i).getArticulo().getIdProducto() == articulo.getIdProducto())
			{
				posicionEliminar = i;
			}
		}
		
			//Comunicacion con Logistica y Monitoreo
			Evento evento = new Evento();
			evento.setAccion("Baja item: ");
			evento.setIdArticulo(itemsCompra.get(posicionEliminar)
					.getArticulo().getNombre());
			evento.setCantidad(String.valueOf(itemsCompra.get(posicionEliminar).getCantidad()));
			log.info("Se envia el logeo a logistica y monitoreo: baja item");
			
			try {
				enviarLog(evento.getXml());
			} catch (Exception e) {
				log.warn("Error en la comunicacion de logueo con logistica y monitoreo"
						+ e.getMessage());
			}
				
		itemsCompra.remove(posicionEliminar);
		compra.setItems(itemsCompra);
		
		
		
		//Modifico la compra con el nuevo item
		request.getSession().setAttribute("compra", compra);
		
		//Devuelvo la lista de articulos			
		request.getSession().setAttribute("articulosCompra", compra.getItems());			
		response.sendRedirect("jsp/ListarComrpaArticulos.jsp");	

		}catch (NotFoundException e){
			request.setAttribute("articulos", null);			
			response.sendRedirect("jsp/ListarComrpaArticulos.jsp");
		}
		catch (NamingException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * Obtiene la lista de configuraciones envia los logs a auditoria y
	 * monitoreo
	 * 
	 * @param compra
	 * @throws BusinessException
	 * @throws LogisticaMonitoreoException
	 * @throws NamingException
	 */
	private void enviarLog(String xml) throws BusinessException,
			LogisticaMonitoreoException, NamingException {

		// Obtiene la configuracion
		Configuracion conFiguracion = BusinessDelegateImpl.getInstance()
				.obtenerConfiguracionLogisticaMonitoreoLog();

		if (conFiguracion != null) {

			LogCreator logCreator = new LogCreator();
			logCreator.generarLog(xml, conFiguracion);
		} else {
			log.warn("No existe configuracion para realizar el log de la venta");
		}

	}
}
